package org.Modulo3;

import org.Modulo1.*;
import org.Modulo2.*;

import java.sql.ResultSet;
import java.util.*;
import javax.swing.JOptionPane;

public class GestorPedido {

    private static ArrayList<Pedido> listaPedidos;
    private static ArrayList<Pedido> listaPedCli;


    public static ArrayList<Pedido> getListaPedidos() {
        return listaPedidos;
    }

    public static void insertarPedido(Cliente c, Pedido ped, String fecha) {
        String SQL_select = "INSERT INTO Pedido(Cliente,Fecha) VALUES(" + c.getId() + ",'" + fecha + "')";

        try {
            Agente.conectar();
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Error al cargar la BBDD: \n " + ex.getMessage(), "Error de conexión", JOptionPane.ERROR_MESSAGE);
        }

        try {
            Agente.insert(SQL_select);
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Error al insertar los datos en la BBDD: \n " + ex.getMessage(), "Error de conexión", JOptionPane.ERROR_MESSAGE);
        }

        try {
            Agente.desconectar();
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Error al desconectar la BBDD: \n " + ex.getMessage(), "Error de conexión", JOptionPane.ERROR_MESSAGE);
        }

    }

    public static void insertarObjetos(Cliente c, Pedido p) {
        for (int i = 0; i < p.getListaObjetos().size(); i++) {

            String SQL_select = "INSERT INTO ProdPedidos VALUES(" + p.getListaObjetos().get(i).getProducto().getId() + "," + p.getId() + "," + p.getListaObjetos().get(i).getCantidad() + ")";

            try {
                Agente.conectar();
            } catch (Exception ex) {
                JOptionPane.showMessageDialog(null, "Error al cargar la BBDD: \n " + ex.getMessage(), "Error de conexión", JOptionPane.ERROR_MESSAGE);
            }

            try {
                Agente.insert(SQL_select);
            } catch (Exception ex) {
                JOptionPane.showMessageDialog(null, "Error al insertar los datos en la BBDD: \n " + ex.getMessage(), "Error de conexión", JOptionPane.ERROR_MESSAGE);
            }

            try {
                Agente.desconectar();
            } catch (Exception ex) {
                JOptionPane.showMessageDialog(null, "Error al desconectar la BBDD: \n " + ex.getMessage(), "Error de conexión", JOptionPane.ERROR_MESSAGE);
            }
        }
    }

    public static void buscarPedido(Cliente c, String fecha, Pedido p) {
        String SQL_select = "SELECT Cod_ped FROM Pedido WHERE Cliente=" + c.getId() + "AND Fecha='" + fecha + "'";
        int idPedido = 0;
        try {
            Agente.conectar();
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Error al cargar la BBDD: \n " + ex.getMessage(), "Error de conexión", JOptionPane.ERROR_MESSAGE);
        }
        try {
            ResultSet resultado = Agente.select(SQL_select);
            while (resultado.next()) {
                idPedido = resultado.getInt(1);
                p.setId(idPedido);
            }
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Error al cargar los clientes : " + ex.getMessage(), "Error de conexión", JOptionPane.ERROR_MESSAGE);
        }

    }
    public static void cargarPedidosBDD() {
        String SQL_select = "SELECT * FROM Pedido";
        Pedido aux;
        listaPedidos = new ArrayList<Pedido>();
        int idPedido = 0;
        int idCliente = 0;
        String fecha = null;
        try {
            ResultSet resultado = Agente.select(SQL_select);
            while (resultado.next()) {
                aux = new Pedido();
                idPedido = resultado.getInt(1);
                idCliente = resultado.getInt(2);
                fecha = resultado.getString(3);
                aux.setId(idPedido);
                aux.setidCliente(idCliente);
                aux.setFecha(fecha);
                listaPedidos.add(aux);
            }
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Error al cargar los pedidos : " + ex.getMessage(), "Error de conexión", JOptionPane.ERROR_MESSAGE);
        }
    }
    public static void cargarPedCliBBDD(Cliente c) {
        String SQL_select = "SELECT * FROM Pedido WHERE cliente="+c.getId()+";";
        Pedido aux;
        listaPedCli = new ArrayList<Pedido>();
        int idPedido = 0;
        int idCliente = 0;
        String fecha = null;
        try {
            ResultSet resultado = Agente.select(SQL_select);
            while (resultado.next()) {
                aux = new Pedido();
                idPedido = resultado.getInt(1);
                idCliente = resultado.getInt(2);
                fecha = resultado.getString(3);
                aux.setId(idPedido);
                aux.setidCliente(idCliente);
                aux.setFecha(fecha);
                listaPedCli.add(aux);
            }
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Error al cargar los pedidos : " + ex.getMessage(), "Error de conexión", JOptionPane.ERROR_MESSAGE);
        }
    }

    public static ArrayList<Pedido> getListaPedCli() {
        return listaPedCli;
    }
    
    public static void cargarProdPed(Pedido p) {
        String SQL_select = "SELECT * FROM ProdPedidos WHERE Cod_ped="+p.getId()+";";
        int cod_prod,num_prod;
        ObjetoPedido obj;
        Producto prod;
        try {
            ResultSet resultado = Agente.select(SQL_select);
            while (resultado.next()) {
                cod_prod = resultado.getInt(1);
                num_prod = resultado.getInt(3);
                prod=new Producto();
                prod.setId(cod_prod);
                GestorProductos.buscarDescProd(prod);
                obj=new ObjetoPedido(prod,num_prod);
                p.getListaObjetos().add(obj);
            }
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Error al cargar los pedidos : " + ex.getMessage(), "Error de conexión", JOptionPane.ERROR_MESSAGE);
        }
    }
    
    public static void eliPed(Pedido p) {
        String SQL_select = "DELETE FROM Pedido WHERE Cod_ped=" + p.getId() + ";";
        try {
            Agente.conectar();
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Error al cargar la BBDD: \n " + ex.getMessage(), "Error de conexión", JOptionPane.ERROR_MESSAGE);
        }

        try {
            Agente.insert(SQL_select);
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Error al eliminar los datos en la BBDD: \n " + ex.getMessage(), "Error de conexión", JOptionPane.ERROR_MESSAGE);
        }

        try {
            Agente.desconectar();
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Error al desconectar la BBDD: \n " + ex.getMessage(), "Error de conexión", JOptionPane.ERROR_MESSAGE);
        }
    }
}

